抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

在日常开发中经常会使用很多的弹框Function,而这些Function在某些时候可以显著提高编程的效率,所以这篇文章对这些Function进行记录,日后需要参考可以从此处快速查找和使用。

SAP 弹框Function汇总

一、报表弹框Function

1.ALV 报表Function

(1)方法名

G_DISPLAY_SELECTION_DYNPRO

(2)介绍

该Function可以将你传入的内表数据通过ALV报表的形式展示出来,而且还可以返回你在报表中光标最后放置的位置的数据索引或双击选中的数据索引。然后根据该索引查找到选择的数据。效果和搜索帮助类似。

在设置报表名称时相对于搜索帮助的字段目录和属性设置要简洁的多。但是有一个注意事项是报表的标题结构和输出内表的结构大体类似,即输出内表中有几个字段,则LS_Header中存在几个用于设置列名的字段结构体。详细的内容可参照下面的源码部分。

(3)图示

1.1 G_DISPLAY_SELECTION_DYNPRO ALV报表Function

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
*全局变量结构
DATA:
BEGIN OF GS_SFLIGHT_S,
CARRID LIKE SFLIGHT-CARRID,
CONNID LIKE SFLIGHT-CONNID,
FLDATE LIKE SFLIGHT-FLDATE,
END OF GS_SFLIGHT_S,
GT_SFLIGHT_S LIKE TABLE OF GS_SFLIGHT_S.

*--------------------------Variables-----------------------------------*
CONSTANTS:
BEGIN OF LS_HEADER,
CARTEXT TYPE CHAR12 VALUE 'Airline Code',
CONTEXT TYPE CHAR17 VALUE 'Connection Number',
FLDTEXT TYPE CHAR11 VALUE 'Flight date',
END OF LS_HEADER.
DATA:
LV_TABIX TYPE SY-TABIX,
LV_HEADER TYPE RGSEL-SEL_TITLE1,
LV_TITLE TYPE RGSEL-DYNP_TITLE VALUE 'ALV Report Popup'.
*----------------------------Logic-------------------------------------*
CHECK GT_SFLIGHT IS NOT INITIAL.
MOVE-CORRESPONDING GT_SFLIGHT TO GT_SFLIGHT_S.
SORT GT_SFLIGHT BY CARRID.

CALL FUNCTION 'G_DISPLAY_SELECTION_DYNPRO'
EXPORTING
ALLOW_PRINT = ' ' "X : 是否允许打印
DYNP_TITLE = LV_TITLE "弹框标题
* EXTENDED_DISPLAY = ' ' "X : 是否显示详细信息
* FIRST_INDEX = 1 "是否显示行索引
* KEY_COLUMNS = 1 "主键字段列
NUMBER_OF_ROWS = 30 "弹出框中展示的行数
* SEL_DEFAULT = 0 "索引行
SEL_TITLE1 = LS_HEADER "列表的第一个标题
* SEL_TITLE2 = ' ' "列表的第二个标题
SHOW_ALSO_1 = 'X' "同时显示带有1个条目的列表
START_COLUMN = 1 "开始的列
* START_ROW = 3 "开始的行
WIDTH_OF_TITLES = 'X' "输出宽度考虑标题长度
* WITHOUT_SELECTION = ' ' "无选择选项(X=无)
* MULTIPLE_SELECTION = ' ' "
* ALLOW_SORT = 'X' "
IMPORTING
* FIRST_INDEX = "最上面显示的行的索引
SEL_INDEX = SY-TABIX "光标最后所在的行索引
* EXT_DISPLAY_SELECTED = "=“X”,如果要求显示详细信息
TABLES
SEL_TABLE = GT_SFLIGHT_S "输出表
* SEL_LINES = "内部表中的当前条目编号
EXCEPTIONS
NO_LINES = 1
NO_LINE_PICKED = 2
OTHERS = 3.
IF SY-SUBRC EQ 0.
READ TABLE GT_SFLIGHT_S INTO GS_SFLIGHT_S INDEX SY-TABIX.
CHECK SY-SUBRC EQ 0.
WRITE: / 'CARRID:', GS_SFLIGHT_S-CARRID,
/ 'CONNID:', GS_SFLIGHT_S-CONNID,
/ 'FLDATE:', GS_SFLIGHT_S-FLDATE.
ENDIF.

选择上面第一条数据,无论是双击或者点击一下点击下方的对勾按钮效果是一样的。

1.2 G_DISPLAY_SELECTION_DYNPRO 选中数据 1.3 G_DISPLAY_SELECTION_DYNPRO 输出结果

2.报表复选框

(1)方法名

REUSE_ALV_POPUP_TO_SELECT

(2)介绍

该Function和上面的ALV报表Function界面类似,但是该Function的弹框中多了一个复选框的字段,使得其可以选择多条数据。使用的形式类似于搜索帮助的多选形式。此外该Function还可以传入Form名称用以添加按钮的响应逻辑。但是该Function设置字段目录的操作较为麻烦,但是可以考虑使用Function REUSE_ALV_FIELDCATALOG_MERGE来快速获取字段目录,但是该Function不允许代码中存在超过72列的代码存在,一旦出现会导致程序Dump。

(3)图示

2.1 REUSE_ALV_POPUP_TO_SELECT 报表复选框

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_C TYPE C LENGTH 1 VALUE 'C',
LC_SEL TYPE C LENGTH 3 VALUE 'SEL',
LC_TABNAME TYPE DD02L-TABNAME VALUE 'SFLIGHT'.

DATA:
BEGIN OF LS_SFLIGHT,
SEL TYPE C,
CARRID TYPE SFLIGHT-CARRID,
CONNID TYPE SFLIGHT-CONNID,
FLDATE TYPE SFLIGHT-FLDATE,
END OF LS_SFLIGHT,
LT_SFLIGHT LIKE TABLE OF LS_SFLIGHT.

DATA:
LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LS_FIELDCAT LIKE LINE OF LT_FIELDCAT.
*----------------------------Logic-------------------------------------*
CHECK GT_SFLIGHT IS NOT INITIAL.
"Get Selected Data
MOVE-CORRESPONDING GT_SFLIGHT TO LT_SFLIGHT.
SORT LT_SFLIGHT BY CARRID.

"Set Fieldcatalog
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_STRUCTURE_NAME = LC_TABNAME
I_INCLNAME = SY-REPID
I_BYPASSING_BUFFER = GC_X
CHANGING
CT_FIELDCAT = LT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Gets The field directory exception
MESSAGE TEXT-E02 TYPE GC_S DISPLAY LIKE GC_E.
EXIT.
ENDIF.

DELETE LT_FIELDCAT WHERE
FIELDNAME NE 'CARRID' AND
FIELDNAME NE 'CONNID' AND
FIELDNAME NE 'FLDATE'.

LOOP AT LT_FIELDCAT INTO LS_FIELDCAT.
LS_FIELDCAT-KEY = GC_NULL.
LS_FIELDCAT-OUTPUTLEN = 15.
CASE LS_FIELDCAT-FIELDNAME.
WHEN 'CARRID'.
LS_FIELDCAT-JUST = LC_C.
LS_FIELDCAT-SELTEXT_L = 'Airline Code'.
WHEN 'CONNID'.
LS_FIELDCAT-JUST = LC_C.
LS_FIELDCAT-SELTEXT_L = 'Connection Number'.
WHEN 'FLDATE'.
LS_FIELDCAT-JUST = LC_C.
LS_FIELDCAT-SELTEXT_L = 'Flight date'.
WHEN OTHERS.
ENDCASE.
MODIFY LT_FIELDCAT FROM LS_FIELDCAT
TRANSPORTING KEY SELTEXT_L JUST OUTPUTLEN.
CLEAR: LS_FIELDCAT.
ENDLOOP.

"Call Check Box Function
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'ALV Repory Check Box'
* I_SELECTION = 'X' "X:允许选择 SPACE:不允许选择
* I_ALLOW_NO_SELECTION = "允许在未选择任何内容的情况下进行复制
I_ZEBRA = 'X' "斑马线
* I_SCREEN_START_COLUMN = 0 "展示开始列
* I_SCREEN_START_LINE = 0 "展示开始行
* I_SCREEN_END_COLUMN = 0 "展示结束列
* I_SCREEN_END_LINE = 0 "展示结束行
I_CHECKBOX_FIELDNAME = LC_SEL "在结构中作为复选框的字段名
* I_LINEMARK_FIELDNAME = "行选择颜色信息字段名称
* I_SCROLL_TO_SEL_LINE = 'X' "
I_TABNAME = 'LT_SFLIGHT' "输出内表名称
* I_STRUCTURE_NAME = "滚动至默认选择
IT_FIELDCAT = LT_FIELDCAT "输出内表字段目录
* IT_EXCLUDING = "Function Code表
* I_CALLBACK_PROGRAM = "调用程序的名称
* I_CALLBACK_USER_COMMAND = "响应Function Code逻辑Form名称
* IS_PRIVATE =
* IMPORTING
* ES_SELFIELD = "选择的数据信息
* E_EXIT = "X:用户关闭弹框标记
TABLES
T_OUTTAB = LT_SFLIGHT "输出内表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC EQ 0.
SORT LT_SFLIGHT BY SEL DESCENDING.
LOOP AT LT_SFLIGHT INTO LS_SFLIGHT GROUP BY (
INDEX = GROUP INDEX
SIZE = GROUP SIZE
SEL = LS_SFLIGHT-SEL ) ASSIGNING FIELD-SYMBOL(<FT_GROUP>).
IF <FT_GROUP>-SEL EQ GC_X.
WRITE: / '总共选中了',<FT_GROUP>-SIZE,'条数据。'.
ENDIF.
ENDLOOP.
ENDIF.

选择五条数据执行后效果如下:

2.2 REUSE_ALV_POPUP_TO_SELECT 选择复数条数据 2.3 REUSE_ALV_POPUP_TO_SELECT 输出结果

二、普通弹框Function

1.长文本弹框

(1)方法名

POPUP_WITH_TABLE_DISPLAY_OK

(2)介绍

该Function只用于将内表中的内容展示出来,但是无法设置其样式而且会自动去除掉内表中用于换行的空行数据,使数据杂糅在一起。但是该Function在使用时十分简洁而且还自带有打印的功能,参数也很简单,若只是展示数据且不考虑样式等信息可以考虑使用该Function。

实际的长文本内容如下:

3.1 POPUP_WITH_TABLE_DISPLAY_OK 实际文本内容

(3)图示

3.2 POPUP_WITH_TABLE_DISPLAY_OK 展示效果

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
*全局变量结构
DATA:
BEGIN OF GS_TEXT,
TDLINE TYPE CHAR255,
END OF GS_TEXT,
GT_TEXT LIKE TABLE OF GS_TEXT.
*----------------------------Logic-------------------------------------*
CHECK GT_TEXT IS NOT INITIAL.

"Call Display Text Value Function
CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'
EXPORTING
ENDPOS_COL = 72 "结束列
ENDPOS_ROW = 20 "结束行
STARTPOS_COL = 1 "开始列
STARTPOS_ROW = 1 "开始行
TITLETEXT = 'Display Text Value' "弹框标题
* IMPORTING
* CHOISE = "表条目数
TABLES
VALUETAB = GT_TEXT "展示内容的内表
EXCEPTIONS
BREAK_OFF = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

2.Form设置的弹框内容

(1)方法名

BKK_POPUP_DISPLAY_LIST

(2)介绍

该Function的使用和Function ALV的Function类似,是通过传入Form,然后通过Form中的输出逻辑在弹框中展示文本内容。此外该Function还可以传入自定义按钮,然后通过点击按钮返回按钮的Function Code来进行其他的逻辑处理。

但是该弹框无法输出空行和换行,具体的样式和上面的Function样式类似。

(3)图示

4.1 BKK_POPUP_DISPLAY_LIST 展示效果

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
*&---------------------------------------------------------------------*
*& Form FORM_SET_TEXT_VALUE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FORM_SET_TEXT_VALUE .
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_TITLE TYPE SYTITLE VALUE 'Text Edit Dialog',
LC_FORMNAME TYPE SLIS_FORMNAME VALUE 'WRITE_TEXT_VALUE'.
*----------------------------Logic-------------------------------------*
CALL FUNCTION 'BKK_POPUP_DISPLAY_LIST'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "程序名称
I_CALLBACK_WRITE_FORM = LC_FORMNAME "输出Form名称
I_TITLE = LC_TITLE "弹框标题
I_START_COLUMN = 1 "开始列
I_START_ROW = 1 "开始行
I_END_COLUMN = 72 "结束列
I_END_ROW = 15 "结束行
* I_DISPLAY_OK_BUTTON = 'X' "显示OK按钮的开关
* I_DISPLAY_CANCEL_BUTTON = 'X' "显示取消按钮的开关
* IMPORTING
* ANSWER = "Ok Code
* TABLES
* USER_BUTTONS = "按钮表
.
"按钮内表类型:SMP_DYNTXT
IF SY-SUBRC NE 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form WRITE_TEXT_VALUE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM WRITE_TEXT_VALUE .
CHECK GT_TEXT IS NOT INITIAL.

LOOP AT GT_TEXT INTO GS_TEXT.
WRITE:/ GS_TEXT-TDLINE.
CLEAR: GS_TEXT.
ENDLOOP.
ENDFORM.

3.两段5行文本弹框

(1)方法名

POPUP_TO_CONFIRM_WITH_MESSAGE

(2)介绍

该Function只是用来展示部分短文本或提问信息使用的,并没有其他的功能可以自定义添加。但是该Function可以隐藏关闭按钮。然后弹框只能展示五行文本,上面三行下面两行,中间换了一行。所以可以理解为该Function是5行两段的弹框。

点击三个按钮的ANSWER返回值如下:

  • YES:1(字符型)
  • NO:2(字符型)
  • Cancel:A

(3)图示

5.1 POPUP_TO_CONFIRM_WITH_MESSAGE 展示结果

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_TEXT1 TYPE STRING VALUE 'Msg One',
LC_TEXT2 TYPE STRING VALUE 'Msg Two',
LC_TEXT3 TYPE STRING VALUE 'Msg Thr',
LC_LINE1 TYPE STRING VALUE 'Text One',
LC_LINE2 TYPE STRING VALUE 'Text Two',
LC_TITLE TYPE SYTITLE VALUE 'Text Edit Dialog'.
*----------------------------Logic-------------------------------------*
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
DEFAULTOPTION = 'Y' "回答“是”或“否”时的光标位置
DIAGNOSETEXT1 = LC_TEXT1 "第一段第一行文本
DIAGNOSETEXT2 = LC_TEXT2 "第一段第二行文本
DIAGNOSETEXT3 = LC_TEXT3 "第一段第三行文本
TEXTLINE1 = LC_LINE1 "第二段第一行文本
TEXTLINE2 = LC_LINE2 "第二段第二行文本
TITEL = LC_TITLE "弹框标题
START_COLUMN = 25 "开始列
START_ROW = 6 "开始行
CANCEL_DISPLAY = 'X' "显示关闭按钮
* IMPORTING
* ANSWER = "用户选择的按钮
.
IF SY-SUBRC NE 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

4.无需确认的弹框

(1)方法名

POPUP_TO_DISPLAY_TEXT

(2)介绍

该Function只适用于提示信息使用的Function,无其余的功能属性,只能展示文本使用且只有一个按钮。

(3)图示

6.1 POPUP_TO_DISPLAY_TEXT 展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_TITLE TYPE STRING VALUE 'Dialog Popup',
LC_TEXT1 TYPE STRING VALUE 'Text One',
LC_TEXT2 TYPE STRING VALUE 'Text Two'.
*----------------------------Logic-------------------------------------*
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
TITEL = LC_TITLE
TEXTLINE1 = LC_TEXT1
TEXTLINE2 = LC_TEXT2
* START_COLUMN = 25
* START_ROW = 6
.
IF SY-SUBRC NE 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

5.横板确认弹框

(1)方法名

POPUP_TO_CONFIRM

(2)介绍

该弹框自带一个绿色的问号图标,且只能展示一段文本。但是弹框中存在三个按钮,可以自定义其中两个按钮的文本和图标内容。以及隐藏关闭按钮。可以用作询问交互使用,例如询问是否要退出程序或删除数据等。

点击三个按钮的ANSWER返回值如下:

  • YES:1(字符型)
  • NO:2(字符型)
  • Cancel:A

(3)图示

7.1 POPUP_TO_CONFIRM展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_TEXT1 TYPE STRING VALUE 'Text Content',
LC_TITLE TYPE STRING VALUE 'Dialog Popup'.
*----------------------------Logic-------------------------------------*
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = LC_TITLE "文本标题
* DIAGNOSE_OBJECT = ' ' "maintain via SE61
TEXT_QUESTION = LC_TEXT1 "文本内容
TEXT_BUTTON_1 = 'YES' "第一个按钮文本
ICON_BUTTON_1 = 'ICON_CHECKED' "第一个按钮图标
TEXT_BUTTON_2 = 'NO' "第二个按钮文本
ICON_BUTTON_2 = 'ICON_INCOMPLETE'"第二个按钮图标
* DEFAULT_BUTTON = '1' "光标位置
* DISPLAY_CANCEL_BUTTON = 'X' "Cancel按钮的隐藏与显示
* USERDEFINED_F1_HELP = ' ' "用户定义的F1帮助
* START_COLUMN = 25 "开始列
* START_ROW = 6 "开始行
* POPUP_TYPE = "图标类型
* IV_QUICKINFO_BUTTON_1 = ' ' "第一个按钮的提示信息
* IV_QUICKINFO_BUTTON_2 = ' ' "第二个按钮的提示信息
* IMPORTING
* ANSWER = "点击按钮返回的Function Code
* TABLES
* PARAMETER = "文本参数表(SPAR)
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

6.竖版确认弹框

(1)方法

POPUP_TO_DECIDE

(2)介绍

竖版按钮交互弹框,和上面提到的弹框类似,只不过样式不同是竖版的。此外该弹框可以传入三行文本,外加可以设置两个按钮的样式和文本内容。

点击三个按钮的ANSWER返回值如下:

  • Button One:1(字符型)
  • Button Two:2(字符型)
  • Cancel:A

(3)图示

8.1 POPUP_TO_DECIDE 展示界面

(4)参考源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_BUT01 TYPE STRING VALUE 'Button One',
LC_BUT02 TYPE STRING VALUE 'Button Two',
LC_TEXT1 TYPE STRING VALUE 'Text Content',
LC_TEXT2 TYPE STRING VALUE 'Text Content One',
LC_TEXT3 TYPE STRING VALUE 'Text Content Two',
LC_TITLE TYPE STRING VALUE 'Dialog Popup'.
*----------------------------Logic-------------------------------------*
CALL FUNCTION 'POPUP_TO_DECIDE'
EXPORTING
* DEFAULTOPTION = '1' "光标在文本的位置
TEXTLINE1 = LC_TEXT1 "第一行文本内容
TEXTLINE2 = LC_TEXT2 "第二行文本内容
TEXTLINE3 = LC_TEXT3 "第三行文本内容
TEXT_OPTION1 = LC_BUT01 "第一个按钮文本
TEXT_OPTION2 = LC_BUT02 "第二个文本按钮
* ICON_TEXT_OPTION1 = ' ' "第一个按钮图标
* ICON_TEXT_OPTION2 = ' ' "第二个按钮图标
TITEL = LC_TITLE "弹框标题
START_COLUMN = 25 "开始列
START_ROW = 5 "开始行
* CANCEL_DISPLAY = 'X' "显示或隐藏Cancel按钮
* IMPORTING
* ANSWER = "点击按钮返回的Function Code
.
IF SY-SUBRC <> 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

三、可输入弹框Function

1.自定义输入框

(1)方法名

POPUP_GET_VALUES

POPUP_GET_VALUES_USER_HELP

(2)介绍

两个方法基本一致,用户可以自定义输入框的描述,输入类型与搜索帮助等信息的弹框,在获取用户输入值方面十分方便。此外还可以通过FIELDS参数设置输入框字段的样式等信息。

点击各个按钮返回的RETURNCODE值如下:

  • 关闭按钮:A
  • 对勾确认按钮:空

(3)图示

9.1 POPUP_GET_VALUES 展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_TITLE TYPE STRING VALUE 'Dialog Popup'.
DATA:
LV_RETURN TYPE C,
LS_FIELDS TYPE SVAL,
LT_FIELDS TYPE TABLE OF SVAL.
*----------------------------Logic-------------------------------------*
CLEAR: LT_FIELDS.

"Set Input Value Field
LS_FIELDS-TABNAME = 'SFLIGHT'.
LS_FIELDS-FIELDNAME = 'CARRID'.
LS_FIELDS-FIELDTEXT = 'Airline Code'.
APPEND LS_FIELDS TO LT_FIELDS.

LS_FIELDS-TABNAME = 'SFLIGHT'.
LS_FIELDS-FIELDNAME = 'CONNID'.
LS_FIELDS-FIELDTEXT = 'Connection Number'.
APPEND LS_FIELDS TO LT_FIELDS.

LS_FIELDS-TABNAME = 'SFLIGHT'.
LS_FIELDS-FIELDNAME = 'FLDATE'.
LS_FIELDS-FIELDTEXT = 'Flight Date'.
LS_FIELDS-VALUE = SY-DATUM.
APPEND LS_FIELDS TO LT_FIELDS.

CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
* NO_VALUE_CHECK = ' ' "执行或不执行数据类型的检测
POPUP_TITLE = LC_TITLE "弹框标题
* START_COLUMN = '5' "开始列
* START_ROW = '5' "开始行
IMPORTING
RETURNCODE = LV_RETURN "用户返回值
TABLES
FIELDS = LT_FIELDS "文本输入框属性与获取到的值
EXCEPTIONS
ERROR_IN_FIELDS = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
"Text Value Function Error
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

(5)SVAL结构解析

字段名 含义
TABNAME 输入框参照数据库表名(SE11中定义的数据库表)
FIELDNAME 输入框参照对应的字段名
VALUE 用户输入的字段值,也可以在调用前传值视为默认值
FIELD_ATTR 字段的外观设置具体属性见下图
FIELD_OBL 需要的字段标志
COMP_CODE 关系运算符
FIELDTEXT 输入框的文本
COMP_TAB
COMP_FIELD
NOVALUEHLP 不显示搜索帮助按钮

字段外观设置参考

9.2 POPUP_GET_VALUES 样式设置参考

2.年月日 日期输入框

(1)方法

  • F4_DATE
  • POPUP_TO_SELECT_MONTH
  • F4_DATE_CONTROL
  • ISU_EDM_DATE_CONTROL_POPUP

(2)介绍

①F4_DATE

只弹出一个小calendar,只显示一个月的日期,但是可以变更年和月。但是似乎是我的主题的原因导致显示有点问题,和默认的日期输入框是一样的。

②POPUP_TO_SELECT_MONTH

该弹框只输入年份和月份两个内容,和上面的普通输入框类似,但是两个输入框均为下拉框的形式。

③F4_DATE_CONTROL

这种输入框和传统的搜索帮助自带的日期输入形式一致。

④ISU_EDM_DATE_CONTROL_POPUP

和上面的输入方式类似,但是这种形式的输入框会将周六和周日使用红色字体标注出来。

(3)图示

①F4_DATE
10.1.1 F4_DATE 展示界面
②POPUP_TO_SELECT_MONTH
10.2.1 POPUP_TO_SELECT_MONTH 展示界面
③F4_DATE_CONTROL
10.1.1 F4_DATE 展示界面
④ISU_EDM_DATE_CONTROL_POPUP
10.4.1 ISU_EDM_DATE_CONTROL_POPUP 展示界面

(4)源码参考

①F4_DATE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  CLEAR: GV_DATE.
CALL FUNCTION 'F4_DATE'
* EXPORTING
* DATE_FOR_FIRST_MONTH = SY-DATUM "用于确定要显示的第一个月
* DISPLAY = ' ' "X = 不允许变更
* FACTORY_CALENDAR_ID = ' ' "时区(数据来源 TFACD)
* GREGORIAN_CALENDAR_FLAG = ' ' "显示公历
* HOLIDAY_CALENDAR_ID = ' ' "公共假日日历(数据来源 THOCI)
* PROGNAME_FOR_FIRST_MONTH = ' ' "程序名称
* DATE_POSITION = ' ' "所选日期的位置
IMPORTING "(空格=中心,T=顶部,B=底部)
SELECT_DATE = GV_DATE "返回选中的日期
* SELECT_WEEK = "
* SELECT_WEEK_BEGIN = "
* SELECT_WEEK_END = "
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
"Date pop-up abnormality
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.
②POPUP_TO_SELECT_MONTH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
*--------------------------Variables-----------------------------------*
DATA:
LV_RESULT TYPE SY-SUBRC,
LV_MONTH TYPE ISELLIST-MONTH.
*----------------------------Logic-------------------------------------*
LV_MONTH = SY-DATUM+0(6).
CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
EXPORTING
ACTUAL_MONTH = LV_MONTH "初始日期
* FACTORY_CALENDAR = ' ' "时区(数据来源 TFACD)
* HOLIDAY_CALENDAR = ' ' "公共假日日历(数据来源 THOCI)
* LANGUAGE = SY-LANGU "系统语言
* START_COLUMN = 8 "开始列
* START_ROW = 5 "开始行
IMPORTING
SELECTED_MONTH = LV_MONTH "返回年月
RETURN_CODE = LV_RESULT"返回值
EXCEPTIONS
FACTORY_CALENDAR_NOT_FOUND = 1
HOLIDAY_CALENDAR_NOT_FOUND = 2
MONTH_NOT_FOUND = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
"Date pop-up abnormality
MESSAGE TEXT-E02 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

CHECK LV_RESULT EQ '0'.
PV_VALUE = LV_MONTH.
③F4_DATE_CONTROL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  CLEAR: GV_DATE.
CALL FUNCTION 'F4_DATE_CONTROL'
* EXPORTING
* DATE_FOR_FIRST_MONTH = SY-DATUM "用于确定要显示的第一个月
* DISPLAY = ' ' "X = 不允许变更
* FACTORY_CALENDAR_ID = ' ' "时区(数据来源 TFACD)
* GREGORIAN_CALENDAR_FLAG = ' ' "显示公历
* HOLIDAY_CALENDAR_ID = ' ' "公共假日日历(数据来源 THOCI)
* HOLIDAY_STYLE = '6' "公共假日样式
* PROGNAME_FOR_FIRST_MONTH = ' ' "程序名称
* WEEK_BEGIN_DAY = 1
* SELECT_OPTION_WEEK = ' '
* SELECT_OPTION_MONTH = ' '
* DATE_POSITION = ' ' "所选日期的位置
IMPORTING "(空格=中心,T=顶部,B=底部)
SELECT_DATE = GV_DATE
* SELECT_WEEK =
* SELECT_BEGIN =
* SELECT_END =
* SELECT_MONTH =
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
"Date pop-up abnormality
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.
④ISU_EDM_DATE_CONTROL_POPUP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  CLEAR: GV_DATE.
CALL FUNCTION 'ISU_EDM_DATE_CONTROL_POPUP'
* EXPORTING
* X_DATE = SY-DATUM "起使日期
* XT_DAY_INFO = "表包含颜色和工具提示信息
* X_DISPLAY = ' ' "是否允许输入
* X_YEAR_BEGIN = "初始年份
* X_YEAR_END = "最终年份
* X_WEEK_BEGIN_DAY = '1' "一周开始的日期
* X_SELECT_WEEK = ' ' "是否可以选择一周
* X_SELECT_MONTH = ' ' "是否可以选择月份
* X_WEEKEND_DAYS = '67' "定义为周末的日子
* X_DISP_HOR_VERT = 'V' "'H'水平或'V'水平
IMPORTING
Y_DATE_SELECTED = GV_DATE "返回选中的日期
* Y_WEEK_SELECTED =
* Y_MONTH_SELECTED =
* Y_SELECTION_BEGIN =
* Y_SELECTION_END =
.
IF SY-SUBRC <> 0.
"Date pop-up abnormality
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

四、文本框Function

1.文本框展示内容

(1)方法名

ADA_POPUP_WITH_TABLE

(2)介绍

该Function是使用文本框来查看文本内容的,可以对展示的文本内容进行打印和下载成Excel等操作。在展示文本框方面十分的简洁。

(3)图示

11.1 ADA_POPUP_WITH_TABLE 展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
*全局变量结构
DATA:
BEGIN OF GS_TEXT,
TDLINE TYPE CHAR255,
END OF GS_TEXT,
GT_TEXT LIKE TABLE OF GS_TEXT.
*--------------------------Variables-----------------------------------*
DATA:
LV_TITLE TYPE STRING VALUE 'Text Box'.
*----------------------------Logic-------------------------------------*
CHECK GT_TEXT IS NOT INITIAL.

CALL FUNCTION 'ADA_POPUP_WITH_TABLE'
EXPORTING
STARTPOS_COL = 1
STARTPOS_ROW = 1
* TITLETEXT = LV_TITLE
* WORDWRAP_POSITION =
TABLES
VALUETAB = GT_TEXT.
IF SY-SUBRC NE 0.
"Text pop-up function exception
MESSAGE TEXT-E04 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

2.文本框编辑内容

(1)方法名

TERM_CONTROL_EDIT

(2)介绍

文本框弹框可以用于编辑,而且也接受通过Excel上传数据,完成之后也可以将页面内容下载成Excel。

(3)图示

12.1 TERM_CONTROL_EDIT 展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
*全局变量结构
DATA:
BEGIN OF GS_TEXT,
TDLINE TYPE CHAR255,
END OF GS_TEXT,
GT_TEXT LIKE TABLE OF GS_TEXT.
*--------------------------Variables-----------------------------------*
DATA:
LV_TITLE TYPE STRING VALUE 'Text Box'.
*----------------------------Logic-------------------------------------*
CHECK GT_TEXT IS NOT INITIAL.
CALL FUNCTION 'TERM_CONTROL_EDIT'
EXPORTING
TITEL = LV_TITLE
LANGU = SY-LANGU
TABLES
TEXTLINES = GT_TEXT
EXCEPTIONS
USER_CANCELLED = 1
OTHERS = 2.
IF SY-SUBRC <> 0 AND SY-SUBRC <> 1.
"Text pop-up function exception
MESSAGE TEXT-E04 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

五、Message 内表

1.公有结构与赋值

后续代码操作中的全局变量与初始值的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"全局内表结构
DATA:
BEGIN OF GS_MESSAGE,
MSGID TYPE BAL_S_MSG-MSGID,
MSGNO TYPE BAL_S_MSG-MSGNO,
MSGTY TYPE BAL_S_MSG-MSGTY,
MSGV1 TYPE BAL_S_MSG-MSGV1,
MSGV2 TYPE BAL_S_MSG-MSGV2,
END OF GS_MESSAGE,
GT_MESSAGE LIKE TABLE OF GS_MESSAGE.

"初始值设置
REFRESH: GT_MESSAGE.

GS_MESSAGE-MSGID = GC_MESSAGEID.
GS_MESSAGE-MSGNO = GC_MESSAGENUMBER.
GS_MESSAGE-MSGTY = GC_S.
GS_MESSAGE-MSGV1 = 'Message'.
GS_MESSAGE-MSGV2 = 'Success'.
INSERT GS_MESSAGE INTO TABLE GT_MESSAGE.

GS_MESSAGE-MSGID = GC_MESSAGEID.
GS_MESSAGE-MSGNO = GC_MESSAGENUMBER.
GS_MESSAGE-MSGTY = GC_W.
GS_MESSAGE-MSGV1 = 'Message'.
GS_MESSAGE-MSGV2 = 'Warning'.
INSERT GS_MESSAGE INTO TABLE GT_MESSAGE.

GS_MESSAGE-MSGID = GC_MESSAGEID.
GS_MESSAGE-MSGNO = GC_MESSAGENUMBER.
GS_MESSAGE-MSGTY = GC_E.
GS_MESSAGE-MSGV1 = 'Message'.
GS_MESSAGE-MSGV2 = 'Error'.
INSERT GS_MESSAGE INTO TABLE GT_MESSAGE.

2.可交互的Message List

(1)介绍

后续开发中如果涉及到需要显示多条Message信息则推荐使用该Function。该Function在显示Message List信息的同时,还可以返回用户点击的按钮信息。如果涉及到后续按钮的点击相关的响应逻辑,则该Function最为推荐。

(2)方法名

RSDC_SHOW_MESSAGES_POPUP

(3)图示

13.1 RSDC_SHOW_MESSAGES_POPUP 展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*--------------------------Variables-----------------------------------*
DATA:
LS_COMMAND TYPE BAL_S_EXCM,
LT_MESSAGE TYPE RS_T_MSG.
*----------------------------Logic-------------------------------------*
"Get Message Value
MOVE-CORRESPONDING GT_MESSAGE TO LT_MESSAGE.

"Call Message List Popup
CALL FUNCTION 'RSDC_SHOW_MESSAGES_POPUP'
EXPORTING
I_T_MSG = LT_MESSAGE "Message 列表
I_TXT = 'Message List' "弹框标题
* I_WITH_S_ON_EMPTY = RS_C_TRUE "S消息,如果列表为空
* I_ONE_MSG_DIRECT = RS_C_TRUE "如果只有一条消息,则直接输出
* I_ONE_MSG_TYPE_S = RS_C_TRUE "将消息输出为“S”消息
IMPORTING
E_S_EXIT_COMMAND = LS_COMMAND. "弹框点击按钮的返回值
IF SY-SUBRC NE 0.
"Message pop-up exception
MESSAGE TEXT-E06 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

3.只用于展示Message List

(1)介绍

该Function的所有参数都是为了展示Message List而设置的。而且在该Function上存在上存在很多的可使用按钮,但是没有可以接收点击按钮的参数,所以该Function无法相互交互。如果后续只是展示数据内容而不涉及点击屏幕按钮后的逻辑则推荐使用这个Function。

其自带的功能按钮十分全面,且可以查看到Message的数据条数。此外,该Function还可以只输出一条数据,使用它的导入参数即可。

(2)方法名

C14Z_MESSAGES_SHOW_AS_POPUP

(3)图示

14.1 C14Z_MESSAGES_SHOW_AS_POPUP展示画面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
*--------------------------Variables-----------------------------------*
DATA:
LS_MESSAGE TYPE ESP1_MESSAGE_WA_TYPE,
LT_MESSAGE TYPE ESP1_MESSAGE_TAB_TYPE.
*----------------------------Logic-------------------------------------*
"Get Message Value
LOOP AT GT_MESSAGE INTO GS_MESSAGE.
LS_MESSAGE-LINENO = SY-TABIX.
MOVE-CORRESPONDING GS_MESSAGE TO LS_MESSAGE.
INSERT LS_MESSAGE INTO TABLE LT_MESSAGE.
CLEAR: GS_MESSAGE,LS_MESSAGE.
ENDLOOP.

CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
* EXPORTING
* I_MSGID =
* I_MSGTY =
* I_MSGNO =
* I_MSGV1 =
* I_MSGV2 =
* I_MSGV3 =
* I_MSGV4 =
* I_LINENO =
TABLES
I_MESSAGE_TAB = LT_MESSAGE.
IF SY-SUBRC NE 0.
"Message pop-up exception
MESSAGE TEXT-E06 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

4.较为复杂的Message List

(1)介绍

该Function的最终效果与上面第一个Message List一致,但是存在一个问题那便是实现过程较为复杂。需要使用到 MESSAGES_INITIALIZE初始化Message 列表,然后使用MESSAGE_STORE一条一条的添加Message 信息,再调用MESSAGES_STOP刷新Message列表信息,最后再调用MESSAGES_SHOW方法显示Message列表。

(2)方法名

  • MESSAGES_INITIALIZE:初始化Message List
  • MESSAGE_STORE:传入Message信息
  • MESSAGES_STOP:刷新Message List
  • MESSAGES_SHOW:调用Message List

(3)图示

15.1 MESSAGES_SHOW 展示界面

(4)源码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
*--------------------------Variables-----------------------------------*
DATA:
LS_WANTED TYPE SMESG,
LS_COMMAND TYPE BAL_S_EXCM.
*----------------------------Logic-------------------------------------*
"Initial Message List
CALL FUNCTION 'MESSAGES_INITIALIZE'.

"Set Message List Value
LOOP AT GT_MESSAGE INTO GS_MESSAGE.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
ARBGB = GS_MESSAGE-MSGID
* EXCEPTION_IF_NOT_ACTIVE = 'X'
MSGTY = GS_MESSAGE-MSGTY
MSGV1 = GS_MESSAGE-MSGV1
MSGV2 = GS_MESSAGE-MSGV2
* MSGV3 = ' '
* MSGV4 = ' '
TXTNR = GS_MESSAGE-MSGNO
* ZEILE = ' '
* IMPORTING
* ACT_SEVERITY = "当前消息的级别
* MAX_SEVERITY = "最高严重程度
EXCEPTIONS
MESSAGE_TYPE_NOT_VALID = 1
NOT_ACTIVE = 2
OTHERS = 3.
CLEAR: GS_MESSAGE.
ENDLOOP.

CALL FUNCTION 'MESSAGES_STOP'
* EXPORTING
* I_RESET_IDENTIFICATION = "标志:重置标识
* I_IDENTIFICATION = "重置消息的标识
* I_RESET_MESSAGES = "标志:重置收集的消息(MESSAGES_INITIALIZE)
EXCEPTIONS
A_MESSAGE = 1
E_MESSAGE = 2
W_MESSAGE = 3
I_MESSAGE = 4
S_MESSAGE = 5
DEACTIVATED_BY_MD = 6
OTHERS = 7.

"Call Message List
CALL FUNCTION 'MESSAGES_SHOW'
EXPORTING
* CORRECTIONS_OPTION = ' ' "如果出现警告:可能进行更正
* CORRECTIONS_FUNC_TEXT = ' ' "功能键“corrections_wanted”的文本
* MSG_SELECT_FUNC = ' ' "可能返回消息
* MSG_SELECT_FUNC_TEXT = ' ' "功能键“msg_selection_option”的文本
* LINE_FROM = ' ' "仅显示具有较长参考线的消息
* LINE_TO = ' ' "仅显示具有较短参考线的消息
OBJECT = 'Message List' "弹框标题
* SEND_IF_ONE = ' ' "如果数量=1,则直接发送消息
* BATCH_LIST_TYPE = 'J' "J=作业日志 L=假脱机列表中 B=两者
SHOW_LINNO = ABAP_FALSE "同时显示行号
* SHOW_LINNO_TEXT = ' ' "行的列标题
* SHOW_LINNO_TEXT_LEN = '3' "显示中行的列宽
I_USE_GRID = ABAP_TRUE "使用ALV网格进行显示;否则为经典ALV
* I_AMODAL_WINDOW = ' ' "Amodal显示(X=ja)
IMPORTING
* CORRECTIONS_WANTED = "如果出现警告:需要更正
"Message Collector Type: SMESG
MSG_SELECTED = LS_WANTED
E_EXIT_COMMAND = LS_COMMAND "点击的按钮
EXCEPTIONS
INCONSISTENT_RANGE = 1
NO_MESSAGES = 2
OTHERS = 3.

IF SY-SUBRC NE 0.
"Message pop-up exception
MESSAGE TEXT-E06 TYPE GC_S DISPLAY LIKE GC_E.
ENDIF.

六、参考资料

SAP 中POPUP函数的弹出框汇总

弹出选择框函数汇总

可输入弹出窗口-[POPUP_GET_VALUES_USER_HELP]

选择画面中日期F4输入帮助函数汇总

SAP-ABAP-ALV弹出窗口供用户输入,获取输入数据

弹出显示多条的message对话框

ABAP 多行消息分别显示弹窗

ABAP在弹窗中输出多条MESSAGE

评论